import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'

import AutoImport from 'unplugin-auto-import/vite'
import px2rem from 'postcss-plugin-px2rem'

// 当前执行node命令时文件夹的地址(工作目录)
const root = process.cwd()

/***********************************************************************************
 *
 *                                    配置项
 *
 ***********************************************************************************/
// https://vite.dev/config/
export default defineConfig(({ mode, command }) => {
  // const env = loadEnv(mode, process.cwd())

  return {
    server: {
      port: 8600,
      host: true,
      open: true,
      proxy: {
        '/dev-api': {
          target: 'http://localhost:18851',
          changeOrigin: true,
          rewrite: (p) => p.replace(/^\/dev-api/, '')
        }
      }
    },
    plugins: [
      vue(),
      AutoImport({
        include: [
          /\.[tj]sx?$/, // .ts, .tsx, .js, .jsx
          /\.vue$/,
          /\.vue\?vue/, // .vue
          /\.md$/ // .md
        ],
        imports: [
          'vue',
          'vue-router'
          // 可额外添加需要 autoImport 的组件
          // {
          //   '@/hooks/web/useI18n': ['useI18n'],
          //   '@/hooks/web/useMessage': ['useMessage'],
          //   '@/hooks/web/useTable': ['useTable'],
          //   '@/hooks/web/useCrudSchemas': ['useCrudSchemas'],
          //   '@/utils/formRules': ['required'],
          //   '@/utils/dict': ['DICT_TYPE']
          // }
        ]
      })
    ],
    resolve: {
      extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.scss', '.css'],
      alias: {
        '@': path.resolve(__dirname, './src'),
        '@utils': path.resolve(__dirname, './src/utils')
      }
    },
    css: {
      postcss: {
        plugins: [
          px2rem({
            rootValue: 16, //换算基数， 默认100 ,根元素字体的大小
            unitPrecision: 5, //允许REM单位增长到的十进制数字，其实就是精度控制
            // propWhiteList: [], // 白名单
            // propBlackList: [], // 黑名单
            exclude: false, //默认false，排除某些文件夹的方法，例如/(node_module)/ 。
            // selectorBlackList: [], //要忽略并保留为 px 的选择器。可以是字符串或者正则表达式
            // ignoreIdentifier: false, //（boolean/string）一种忽略单个属性的方法，当启用 ignoreIdentifier 时，replace将自动设置为true。
            // replace: true, // （布尔值）替换包含 rems 的规则，而不是添加后备规则。
            mediaQuery: false, //（布尔值）允许在媒体查询中转换px
            minPixelValue: 0 // 设置要替换的最小像素值。 默认 0
          })
        ]
      }
    }
  }
})
